#pragma once 
#include <string>

class IBreakPointFile {
public:
  explicit IBreakPointFile(const std::string & fileName);
  virtual ~IBreakPointFile();
  virtual int load() = 0;
  virtual int save(int no) = 0;

protected:
  const std::string & getFileName() const{
    return _fileName;
  }
private:
  std::string _fileName;
};



class BreakPointFileAsBinary : public IBreakPointFile{
public:
  BreakPointFileAsBinary(const std::string & fileName) ;

  ~BreakPointFileAsBinary() override;

  int load() override;

  int save(int no) override;

};

class BreakPointFileAsText : public IBreakPointFile{
public:
  BreakPointFileAsText(const std::string & fileName);
  ~BreakPointFileAsText() override;

  int load() override;

  int save(int no) override;
};



void test_breakpoint_file();
